package com.cn.wanxi.util;

import org.omg.CORBA.PUBLIC_MEMBER;

import java.sql.*;

/**
 * 1.注册驱动 一般写在静态代码块
 * 2.得到连接  一般单独定义一个静态方法 而且还是属于一个单例（整个过程中只有一个是咧）
 * 3.执行sql语句
 * 4.返回结果
 * 5.处理结果（移动到impl层）
 * 6.关闭资源（因为我们用的局部变量，周期只存在与方法内部，不需要关系）
 */
public class JDBC {
    static {
//        Class.forName 反射 得到对象
        try {
            Class.forName(JDBCEnum.DRIVER.getValue());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private static Connection getConnection() {
//        需要连接数据库的地址，用户名，密码
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(JDBCEnum.URL.getValue(), JDBCEnum.USER.getValue(), JDBCEnum.PASSWORD.getValue());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    public static ResultSet query(String sql) {
        ResultSet rs = null;
        try {
//            获得语句执行对象
            PreparedStatement ps = getConnection().prepareStatement(sql);
            rs = ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    /**
     * 更新（新增，修改，删除)
     * try catch 如果有unique，只要出现相同的，则会报异常
     * @param sql
     * @return
     */
    public static int update(String sql) {
        try {
            PreparedStatement ps = getConnection().prepareStatement(sql);
            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public static void main(String[] args) {
        System.out.println(getConnection());
    }
}
